package com.cmy.baseGrammar;
public class TypConversion {
    public static void main(String[] args) {
        //运算中不同类型的数据类型需要转换成相同的,才能进行运算,
        // 所以需要类型转换,而这里涉及精度丢失的问题
        /*
        低---------------------------------------高
        byte,short,char->int->long->float->doule
        */
        //类型 转换 低精度->高精度 不会丢失精度,(自动类型转换)反之则可能丢失精度(强制类型转换)

        //强制类型转换  (类型)变量名 高->低
        int i = 128;
        byte b = (byte) i;
        System.out.println(b);//溢出
        //自动类型转换 低->高
        byte c = 20;
        int j = c;
        System.out.println(j);

        /*
        *TIPS
        * 1.不能对布尔值进行类型转换
        * 2.不能把对象类型转换为不相干的类型
        * 3.高->低 要进行 强制转换 可以丢失精度
        * */
        float f1 = 52.2F;
        float f2 = 52.8F;
        int i1 = (int)f1;
        int i2 = (int)f2;
        System.out.println(i1);//52 保留整数部分,不进行四舍五入,可以+0.5来手动进行四舍五入
        System.out.println(i2);//52

        //操作比较大的数字时,注意溢出问题
        //为了方便读,jdk7后数字可以用下划线分割而不影响数字输出
        int money = 10_0000_0000;//1000000000
        int year = 20;
        int total = year*money;//-1474836480 溢出
        long total2 = total;//-1474836480 还是溢出 转前已经出现问题了
        long total3 = money*(long)year;//先把一个数转为long
        System.out.println(total3);//20000000000



        


    }
}

    